package com.zfl.utils;

/**
 * ThreadLocal工具类：存储当前请求的用户上下文信息
 */
public class UserContextHolder {

    // 存储用户上下文（线程隔离）
    private static final ThreadLocal<UserContext> USER_CONTEXT = new ThreadLocal<>();

    /**
     * 存入用户上下文
     */
    public static void setUserContext(UserContext userContext) {
        USER_CONTEXT.set(userContext);
    }

    /**
     * 获取当前用户上下文
     */
    public static UserContext getUserContext() {
        return USER_CONTEXT.get();
    }

    /**
     * 清理用户上下文（必须在请求结束后调用）
     */
    public static void clear() {
        USER_CONTEXT.remove();
    }

    /**
     * 用户上下文内部类：存储需要共享的核心信息
     */
    public static class UserContext {
        private Long userId;    // 用户ID
        private Long roleId;    // 角色ID

        // Getter和Setter
        public Long getUserId() {
            return userId;
        }

        public void setUserId(Long userId) {
            this.userId = userId;
        }

        public Long getRoleId() {
            return roleId;
        }

        public void setRoleId(Long roleId) {
            this.roleId = roleId;
        }
    }
}